#!/usr/bin/env python3
"""
脚本名称：ch22_exe.py
功能描述： 变量作用域和global/nonlocal关键字
作者：Gavin
创建日期：2022-05-06
版本：1.0
依赖库：无
使用方法： python ch22_exe.py
"""

# 1. 变量作用域
x = "global"  # G 作用域


def outer():
    y = "enclosing"  # E 作用域

    def inner():
        z = "local"  # L 作用域
        print(z)  # 访问 L
        print(y)  # 访问 E
        print(x)  # 访问 G

    inner()


outer()

# 2. global 关键字
count = 0  # 全局变量


def increment():
    global count  # 声明操作全局变量
    count += 1  # 修改全局变量
    print(f"全局 count: {count}")


increment()  # 输出：全局 count: 1

# 2.1 常见错误
value = 10


def set_value():
    value = 20  # 这实际是创建局部变量，不会修改全局的 value


set_value()
print(value)  # 输出 10（全局变量未被修改）


# 3. nonlocal 关键字
def outer2():
    counter = 0  # 外层函数变量（E 作用域）

    def inner():
        nonlocal counter  # 声明操作外层变量
        counter += 1
        print(f"外层 counter: {counter}")

    return inner


func = outer2()
func()  # 输出：外层 counter: 1
func()  # 输出：外层 counter: 2


# 3.1 常见错误
def outer3():
    x = 10

    def inner():
        x = 20  # 这实际是创建局部变量，不会修改外层的 x

    inner()
    print(x)  # 输出 10（外层变量未被修改）


outer3()
